package com.fz.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.fz.core.BaseEntity;

import java.util.HashMap;
import java.util.Map;

public class CodeGenerator {
    public static void main(String[] args) {
        // 获取项目根路径
        String basePath = System.getProperty("user.dir");
        String table = "orders";
        String url = "jdbc:mysql://localhost:3306/smart-com?" +
                "serverTimezone=Asia/Shanghai";
        // 代码生成器配置
        FastAutoGenerator.create(url, "root", "123456")
                // 全局配置
                .globalConfig(i -> {
                    i.author("hyr")// 作者名称
                            .disableOpenDir()// 生成完之后不会默认打开目录
                            .outputDir(basePath + "/back/src/main/java");// 创建的路径
                })
                // 包配置
                .packageConfig(i -> { // new接口直接使用匿名内部类的方式实现
                    Map<OutputFile, String> pathInfo = new HashMap<>();// map键值对
                    // 修改xml配置文件的生成路径 将其放在resources目录下
                    pathInfo.put(OutputFile.xml, basePath + "/back/src/main/resources/com/fz/mapper");
                    i.parent("com.fz")// 父包
                            .pathInfo(pathInfo); // 存储的路径 键值对
                })
                //策略配置
                .strategyConfig(i -> {
                    i.addInclude(table);
                    i.entityBuilder()
                            .enableLombok()// 可使用lombok包
                            .superClass(BaseEntity.class) // 父类
                            .addSuperEntityColumns("id")//父类属性
                            //id_card --->inCard
                            .columnNaming(NamingStrategy.underline_to_camel) // 命名规则
                            .controllerBuilder()
                            .enableRestStyle()// controller加入RestController注解
                            .serviceBuilder()
                            .formatServiceFileName("%sService");
                }).templateEngine(new FreemarkerTemplateEngine())// 指定模板
                .execute();
    }
}
